<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Transfer
 *
 * @author Juliano
 */
class Transfer {
    /* METODO QUE FAZ A COPIA DE UM ARQUIVO PARA UMA PASTA ESPECIFICA
     * @PARAM STRING $src = CAMINHO DO ARQUIVO ATUAL NO QUE SERA COPIADO
     * @PARAM STRING $dst = CAMINHO DO DESTINHO ONDE SERA COLADO
     */
    public function transferFile($src, $dst) {
        try {
            $response = null;
            if (!file_exists($src)) {
                throw new Exception("Caminho do arquivo nao existe");
            }

            //se nao existir a pasta no destino tenta criar e copia o arquivo
            if (!file_exists(dirname($dst))) {
                $pastaDestino = dirname($dst);
                $criaPasta = @mkdir($pastaDestino, 0777) or die("erro ao criar diretorio - {$pastaDestino}: " . __CLASS__);
                if ($criaPasta) {
                    $response = copy($src, $dst);
                }
            } else {
                //verifica se houve alguma alteracao no arquivo principal
                //antes de copiar
                if ($this->diffSize($src, $dst)) {
                    $response = copy($src, $dst);
                }
            }
        } catch (Exception $exc) {
            exit($exc->getMessage());
        }
    }

    /* METODO QUE COMPARA O TAMNHO DE UM ARQUIVO
     * @PARAM STRING $fileupdate = CAMINHO DO ARQUIVO MODIFICADO
     * @PARAM STRING $fileCompare = CAMINHO DO ARQUIVO QUE IRA SER COMPARADO
     * @RETURN BOOL
     */
    public function diffSize($fileupdate, $fileCompare) {
        if(file_exists($fileCompare)){
            $atualfile = sprintf("%u", filesize($fileupdate));
            $targetFile = sprintf("%u", filesize($fileCompare));
            if ($atualfile != $targetFile) {
                return true;
            } else {
                return false;
            }
        }else{
            return true;
        }
    }

}
